<?php
session_start();
require_once ('Model/Database.php');
require_once ('Model/LoginHandler.php');
require_once ('Model/PostHandler.php');
require_once ('Model/RegisterHandler.php');
require_once ('Model/DBconfig.php');
require_once ('Model/Post.php');
require_once ('Model/PostHandler.php');
//Views
require_once ('View/PostView.php');
require_once ('View/LoginView.php');
require_once ('View/RegisterView.php');
require_once ('View/NavigationView.php');
require_once ('View/PageCompositionView.php');
//Controllers
require_once ('Controller/MasterController.php');
require_once ('Controller/LoginController.php');
require_once ('Controller/RegisterController.php');
require_once ('Controller/PostController.php');
require_once ('Controller/PostListController.php');
//Common
require_once ("Common/Page.php");
require_once ("Common/Validator.php");

class TestAll {
	const PASSWORD_MISSMATCH = 0;

	public function TestLogin() {

		$database = new Model\Database();
		$database -> Connect(new Model\DBConfig());

		//Test för inloggning!
		$lh = new Model\LoginHandler($database);

		$lh -> DoLogout();
		// loggar ut

		if ($lh -> IsLoggedIn() == true) {//IsLoggedIn kollar om man är inloggad
			echo "Test 1 misslyckades - IsLoggedIn tror att du är inloggad!";
			return false;
		}

		if ($lh -> DoLogin("edin", "asd") == true) {//Testar logga in med felaktiga uppgifter..
			echo "Test 2 misslyckades - Du kan logga in med felaktiga uppgifter!";
			return false;
		}
		if ($lh -> DoLogin("edn", "4321") == true) {//Testar logga in med felaktiga uppgifter..
			echo "Test 2 misslyckades - Du kan logga in med felaktiga uppgifter!";
			return false;
		}
		if ($lh -> IsLoggedIn() == true) {//IsLoggedIn kollar om man är inloggad
			echo "Test 1 misslyckades - IsLoggedIn tror att du är inloggad!";
			return false;
		}

		if ($lh -> DoLogin("edin", "qfxzid5d") == false) {//Testar logga in med rätt uppgifter
			echo "Test 3 misslyckades - Du kan inte logga in med rätt uppgifter!";
			return false;
		}
		if ($lh -> IsLoggedIn() == false) {//Kontrollerar om man fortfarande är inloggad
			echo "Test 4 misslyckades - Du är fortfarande inloggad!";
			return false;
		}
		$lh -> DoLogout();
		if ($lh -> IsLoggedIn() == true) {//IsLoggedIn kollar om man är inloggad
			echo "Test 1 misslyckades - IsLoggedIn tror att du är inloggad!";
			return false;
		}
		return true;
	}

	//Test för Registrering
	public function TestRegister() {
		$database = new Model\Database();
		$database -> Connect(new Model\DBConfig());

		$rh = new Model\RegisterHandler($database);

		//Registrera användare
		if ($rh -> RegisterUser('johan', 'asdasdA1', 'asdasdA1') != 4) {
			echo 'Test 1 misslyckades. Användaren registreras inte även att uppgifterna är korrekta.';

			return false;
		}
		$rh -> DeleteUser('johan');

		//Lösenorden ska ha en minimilängd pä 6 tecken
		if ($rh -> RegisterUser('johan', 'tre', 'tre') != 3) {
			echo 'Test 2 misslyckades. Användaren registreras även att lösenordet bara har 3 tecken.';
			$rh -> DeleteUser('johan');
			return false;
		}

		//Båda lösenorden måste vara matchande
		if ($rh -> RegisterUser('johan', 'password', 'wordpass') != 0) {
			echo 'Test 3 misslyckades. Båda lösenorden måste stämma överens.';
			$rh -> DeleteUser('');
			return false;
		}

		//Nya användare får inte ha tomt användarnamn
		if ($rh -> RegisterUser('', 'riktig', 'riktig') != 1) {
			echo 'Test 4 misslyckades. Användaren får inte registrerars med tomt användarnamn.';

			$rh -> DeleteUser('');
			return false;

		}

		//Man ska inte kunna skapa tvä användare med samma namn
		$rh -> RegisterUser('johan', 'asdasdA1', 'asdasdA1');

		if ($rh -> RegisterUser('nisse', 'asdasdA1', 'asdasdA1') != 2) {
			echo 'Test 5 misslyckades. Det ska inte gå att skapa två användare med samma namn.';
			$rh -> DeleteUser('johan');
			return false;
		}
		$rh -> DeleteUser('johan');

		//Man ska kunna plocka bort en användare ur databasen
		$rh -> RegisterUser('johan', 'asdasdA1', 'asdasdA1');
		$rh -> RegisterUser('pelle', 'asdasdA1', 'asdasdA1');
		$rh -> DeleteUser('johan');

		if ($rh -> RegisterUser('johan', 'asdasdA1', 'asdasdA1') != 4) {
			echo 'Test 1 för DeleteUser misslyckades. Användare plockas inte bort på rätt sätt';
			return false;
		}
		$rh -> DeleteUser('johan');
		$rh -> DeleteUser('pelle');

		return true;

	}

	public function ManualTest() {
		$xhtml = '';

		$database = new Model\Database();
		$database -> Connect(new Model\DBConfig());

		$rc = new Controller\RegisterController();
		$rv = new View\RegisterView();

		//Test 1 för formuläret
		$xhtml .= '<h4>Utdata ska visa ett tomt registerformulär</h4>
					<hr/>' . $rv -> DoRegisterForm() . '<hr/>';

		//Test 2 för formulöret
		$_POST['newUsername'] = '';
		$_POST['newPassword'] = 'testar';
		$_POST['newPassword2'] = 'testar';
		$_POST['submitregister'] = 'Registrera';

		$xhtml .= '<h4>Utdata ska visa ett tomt registerformulär med ett meddelande om att alla fält måste vara ifyllda</h4>
					<hr/>' . $rc -> DoControll($database) . '<hr/>';

		return $xhtml;

		echo $xhtml;

	}

	public static function Posttest() {
		$database = new Model\Database();
		$database -> Connect(new Model\DBConfig());
		$sut = new Model\postHandler($database);

		$allposts = $sut -> getAllposts();

		if (get_class($allposts) == "Model\postArray") {
			echo "postCatalog->getAllposts() returned a " . get_class($allposts);

			return false;
		}
		if (count($allposts -> get()) != 3) {
			echo "postCatalog->getAllposts() returned wrong number of posts";

			return false;
		}

		return true;
	}

}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>Testdriven utveckling</title>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	</head>
	<body class="">
		<p>

			<?php

			//Test av login
			echo "<h2>Tester av applikation</h2>";

			$login = new TestAll();
			if ($login -> TestLogin() == true) {
				echo "<p>Logintest ok</p>";
			} else {
				echo "<p>Logintest fungerar ej</p>";
			}
			//Test av registrering
			if ($login -> TestRegister() == true) {
				echo "<p>Registreringstest ok</p>";
			} else {
				echo "<p>Registreringstest fungerar ej</p>";
			}
			//Test av poster
			if ($login -> Posttest() == true) {
				echo "<p>Posttest ok</p>";
			} else {
				echo "<p>Posttest fungerar ej</p>";
			}
			print_r($login -> ManualTest());
			?>
		</p>
	</body>
</html>

